home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / pcpen.arc / PCPEN.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1985-02-09  |  13.1 KB  |  441 lines

  1. 10  ' PC-Pen - Version 1.0
  2. 20  ' (C) Copyright 1985 SoftTec Systems
  3. 30  ' All Rights Reserved
  4. 40  ' This program was run through STS DELCMT
  5. 50  ' on Feb 5, 1985 at 9:11:30.
  6. 60  CLEAR:ON ERROR GOTO 3980:DEF SEG:DEFINT A-Z:OPTION BASE 1:KEY OFF:RESTORE
  7. 70  DIM PICA%(6802),PICB%(6802),PICC%(6802),ERRCD%(18),ERRRES%(18),ERRMSG$(18),ACT$(5)
  8. 80  FOR I=1 TO 4:READ J:KEY 14+I,CHR$(J)+CHR$(&H46):ON KEY(14+I) GOSUB 3830:KEY(14+I) ON:NEXT I
  9. 90  FOR I=1 TO 18:READ ERRCD%(I),ERRRES%(I),ERRMSG$(I):NEXT I
  10. 100  FOR I=1 TO 5:READ ACT$(I):NEXT I
  11. 110  FOR I=1 TO 10:KEY I,"":NEXT I
  12. 120  PICA%(1)=-999:PICB%(1)=-999:PICC%(1)=-999
  13. 130  PNT=0:RES=1:PAL=0:BACK=0:MARK=0:COL=3:MODE=0:BCKPNT=0:X=159:Y=85:BLNK=1:ESC=0
  14. 140  SCREEN 0,1,0,0:WIDTH 80:CLS:COLOR 2,0
  15. 150  LOCATE 3,5,0:PRINT CHR$(201);
  16. 160  FOR I=1 TO 68:PRINT CHR$(205);:NEXT I
  17. 170  PRINT CHR$(187);
  18. 180  FOR I=4 TO 22:LOCATE I,74,0:PRINT CHR$(186);:NEXT I
  19. 190  LOCATE 23,74,0:PRINT CHR$(188);
  20. 200  FOR I=73 TO 6 STEP -1:LOCATE 23,I,0:PRINT CHR$(205);:NEXT I
  21. 210  LOCATE 23,5,0:PRINT CHR$(200);
  22. 220  FOR I=22 TO 4 STEP -1:LOCATE I,5,0:PRINT CHR$(186);:NEXT I
  23. 230  COLOR 6,0
  24. 240  LOCATE  5,10,0 : PRINT "PC-Pen - Version 1.0";
  25. 250  LOCATE  5,59,0 : PRINT "Reg. #00001";
  26. 260  LOCATE  6,10,0 : PRINT "(C) Copyright 1985 SoftTec Systems";
  27. 270  LOCATE  6,51,0 : PRINT "All Rights Reserved";
  28. 280  LOCATE  8,10,0 : PRINT "PC-Pen is a shareware  product.  Please help  us  distribute";
  29. 290  LOCATE  9,10,0 : PRINT "PC-Pen  by  sharing  unmodified copies of PC-Pen, its user's";
  30. 300  LOCATE 10,10,0 : PRINT "manual, and manual printer with others.  If you find  PC-Pen";
  31. 310  LOCATE 11,10,0 : PRINT "useful  we  trust  you  to register your copy.  Registration";
  32. 320  LOCATE 12,10,0 : PRINT "costs $25 and entitles you to telephone and mail support,  a"
  33. 330  LOCATE 13,10,0 : PRINT "diskette  containing  your  own registered copy of PC-Pen, a";
  34. 340  LOCATE 14,10,0 : PRINT "bound and registered copy of the PC-Pen user's  manual,  and";
  35. 350  LOCATE 15,10,0 : PRINT "a  free  mailed  copy of the next updated version of PC-Pen.";
  36. 360  LOCATE 16,10,0 : PRINT "Residents of Virginia include 4% sales tax.  Send  name  and";
  37. 370  LOCATE 17,10,0 : PRINT "address and check or money order to:";
  38. 380  LOCATE 19,29,0 : PRINT "SoftTec Systems";
  39. 390  LOCATE 20,29,0 : PRINT "2251 Pimmit Drive #434";
  40. 400  LOCATE 21,29,0 : PRINT "Falls Church, VA 22043";
  41. 410  LOCATE 24,29,0
  42. 420  COLOR 2,0
  43. 430  PRINT "Press any key to begin.";
  44. 440  IN$=INKEY$:IF IN$="" THEN 440
  45. 450  SCREEN RES,0:COLOR BACK,PAL
  46. 460  GOSUB 1570
  47. 470  IN$=INKEY$:IF IN$<>"" THEN 530
  48. 480  FOR I=1 TO 25:NEXT I
  49. 490  IF BLNK=1 THEN PSET (X,Y),0
  50. 500  IF MARK=1 THEN PSET (MARKX,MARKY),0
  51. 510  FOR I=1 TO 25:NEXT I
  52. 520  GOTO 880
  53. 530  IF BLNK=1 THEN PSET (X,Y),0
  54. 540  IF MARK=1 THEN PSET (MARKX,MARKY),0
  55. 550  IF PNT=1 THEN IF MODE=0 THEN BCKPNT=COL ELSE BCKPNT=0
  56. 560  IF LEN(IN$)>1 THEN 700
  57. 570  IN=ASC(IN$)
  58. 580  PSET (X,Y),BCKPNT
  59. 590  IF IN>13 OR IN<7 THEN 670
  60. 600  IF IN<>8 THEN 640
  61. 610  X=X-8:IF X>=8 THEN 630 ELSE IF RES=1 THEN X=306 ELSE X=626
  62. 620  Y=Y-8:IF Y<3 THEN Y=162
  63. 630  GOSUB 1130:PRINT " ";:GOTO 680
  64. 640  IF IN=9 THEN X=X+8:IF X>317*RES THEN X=X-317*RES
  65. 650  IF IN=13 THEN X=10:Y=Y+8:IF Y>167 THEN Y=10
  66. 660  GOTO 680
  67. 670  GOSUB 1130:POKE &H4E,COL:PRINT IN$;:X=X+8:IF 317*RES-X<6/RES THEN X=10:Y=Y+8:IF Y>167 THEN Y=10
  68. 680  BCKPNT = POINT(X,Y)
  69. 690  GOTO 470
  70. 700  IN=ASC(RIGHT$(IN$,1))
  71. 710  IF IN<71 OR IN>81 THEN 760
  72. 720  PSET (X,Y),BCKPNT
  73. 730  ON IN-70 GOSUB 1010,930,1040,3830,950,3830,990,3830,1070,970,1100
  74. 740  BCKPNT=POINT (X,Y)
  75. 750  GOTO 880
  76. 760  IF IN<59 OR IN>68 THEN 790
  77. 770  ON IN-58 GOSUB 1200,1500,1260,1310,3670,1550,2030,1940,1350,2870
  78. 780  GOTO 880
  79. 790  IF IN<84 OR IN>91 THEN 820
  80. 800  ON IN-83 GOSUB 2360,2430,2580,2610,2800,2470,2550,2520
  81. 810  GOTO 880
  82. 820  IF IN<94 OR IN>99 THEN 850
  83. 830  ON IN-93 GOSUB 3620,3830,2270,2310,1670,2400
  84. 840  GOTO 880
  85. 850  IF IN=15 THEN PSET (X,Y),BCKPNT:X=X-8:IF X<0 THEN X=317*RES+X:GOTO 680 ELSE GOTO 680
  86. 860  IF IN=82 THEN GOSUB 1400:GOTO 880
  87. 870  IF IN=83 THEN GOSUB 1450:GOTO 880
  88. 880  IF MARK=0 THEN 910
  89. 890  I=POINT(MARKX,MARKY):IF I<>0 THEN BCKMRK=I
  90. 900  PSET (MARKX,MARKY),MRKCOL
  91. 910  IF BLNK=1 THEN PSET(X,Y),COL ELSE IF PNT=1 THEN IF MODE=0 THEN PSET(X,Y),COL ELSE PSET(X,Y),0
  92. 920  GOTO 470
  93. 930  IF Y>0 THEN Y=Y-1 ELSE Y=169
  94. 940  RETURN
  95. 950  IF X>0 THEN X=X-1 ELSE X=317*RES
  96. 960  RETURN
  97. 970  IF Y<169 THEN Y=Y+1 ELSE Y=0
  98. 980  RETURN
  99. 990  IF X<317*RES THEN X=X+1 ELSE X=0
  100. 1000  RETURN
  101. 1010  IF Y>0 THEN Y=Y-1 ELSE Y=169
  102. 1020  IF X>0 THEN X=X-1 ELSE X=317*RES
  103. 1030  RETURN
  104. 1040  IF Y>0 THEN Y=Y-1 ELSE Y=169
  105. 1050  IF X<317*RES THEN X=X+1 ELSE X=0
  106. 1060  RETURN
  107. 1070  IF Y<169 THEN Y=Y+1 ELSE Y=0
  108. 1080  IF X>0 THEN X=X-1 ELSE X=317*RES
  109. 1090  RETURN
  110. 1100  IF Y<169 THEN Y=Y+1 ELSE Y=0
  111. 1110  IF X<317*RES THEN X=X+1 ELSE X=0
  112. 1120  RETURN
  113. 1130  PRY=INT(Y/8)+1:PRX=INT(X/8)+1
  114. 1140  IF PRY=1 THEN Y=Y+8:GOTO 1130
  115. 1150  IF PRY=22 THEN Y=Y-8:GOTO 1130
  116. 1160  IF PRX=1 THEN X=X+8:GOTO 1130
  117. 1170  IF PRX=40*RES THEN X=10:Y=Y+8:IF Y>167 THEN Y=10:GOTO 1130 ELSE GOTO 1130
  118. 1180  LOCATE PRY,PRX
  119. 1190  RETURN
  120. 1200  GOSUB 3840:GOSUB 1690:IF MARK=1 THEN MARK=0
  121. 1210  IF RES=1 THEN BKCOL=COL:COL=1:BKPAL=PAL:PAL=0:BKBACK=BACK:BACK=0:X=X*2:RES=2 ELSE COL=BKCOL:PAL=BKPAL:BACK=BKBACK:X=INT(X/2):RES=1
  122. 1220  SCREEN RES,0:IF RES=1 THEN COLOR BACK,PAL
  123. 1230  IF WNDW=1 THEN GOSUB 1570 ELSE GOSUB 1610
  124. 1240  GOSUB 1710
  125. 1250  RETURN
  126. 1260  IF RES=2 THEN ERROR 204:GOTO 1300
  127. 1270  IF PAL=0 THEN PAL=1 ELSE PAL=0
  128. 1280  COLOR BACK,PAL
  129. 1290  IF WNDW=1 THEN POKE &H4E,3:LOCATE 24,28:PRINT USING "#";PAL+1;
  130. 1300  RETURN
  131. 1310  IF RES=2 THEN ERROR 204:GOTO 1340
  132. 1320  COL=COL+1:IF COL>3 THEN COL=1
  133. 1330  IF WNDW=1 THEN POKE &H4E,3:LOCATE 24,39:PRINT USING "#";COL;
  134. 1340  RETURN
  135. 1350  GOSUB 3840:GOSUB 3890
  136. 1360  IF ESC=1 THEN ESC=0:GOTO 1390
  137. 1370  IF IN$="N" OR IN$="n" THEN 1390
  138. 1380  SYSTEM
  139. 1390  RETURN
  140. 1400  IF PNT=0 THEN PNT=1 ELSE PNT=0
  141. 1410  IF WNDW=0 THEN 1440
  142. 1420  POKE &H4E,3:LOCATE 25,24*RES:PRINT "PEN=";
  143. 1430  IF PNT=0 THEN PRINT "UP  "; ELSE PRINT "DOWN";
  144. 1440  RETURN
  145. 1450  IF BLNK=0 THEN BLNK=1 ELSE BLNK=0:PSET (X,Y),BCKPNT
  146. 1460  IF WNDW=0 THEN 1490
  147. 1470  POKE &H4E,3:LOCATE 25,33*RES:PRINT "POS=";
  148. 1480  IF BLNK=0 THEN PRINT "OFF"; ELSE PRINT "ON ";
  149. 1490  RETURN
  150. 1500  IF RES=2 THEN ERROR 204:GOTO 1540
  151. 1510  BACK=BACK+1:IF BACK>15 THEN BACK=0
  152. 1520  COLOR BACK,PAL
  153. 1530  IF WNDW=1 THEN POKE &H4E,3:LOCATE 24,19:PRINT USING "##";BACK+1;
  154. 1540  RETURN
  155. 1550  IF WNDW=1 THEN GOSUB 1610 ELSE GOSUB 1570
  156. 1560  RETURN
  157. 1570  VIEW (1,1)-(318*RES,170),,1
  158. 1580  GOSUB 1730:GOSUB 1760
  159. 1590  WNDW=1
  160. 1600  RETURN
  161. 1610  VIEW (1,1)-(318*RES,170),,0
  162. 1620  LOCATE 23,1:PRINT SPC(39*RES);
  163. 1630  LOCATE 24,1:PRINT SPC(39*RES);
  164. 1640  LOCATE 25,1:PRINT SPC(39*RES);
  165. 1650  WNDW=0
  166. 1660  RETURN
  167. 1670  GOSUB 3840:GET (0,0)-(317*RES,169),PICC%
  168. 1680  RETURN
  169. 1690  GET (0,0)-(317*RES,169),PICA%
  170. 1700  RETURN
  171. 1710  PUT (0,0),PICA%,PSET
  172. 1720  RETURN
  173. 1730  IF RES=1 THEN LOCATE 23,1 ELSE LOCATE 23,21
  174. 1740  POKE &H4E,1:PRINT " PC-Pen                    F10 ==> Help";
  175. 1750  RETURN
  176. 1760  POKE &H4E,3
  177. 1770  LOCATE 24,2*RES:PRINT "RES=";
  178. 1780  IF RES=1 THEN PRINT "LOW "; ELSE PRINT "HIGH";
  179. 1790  LOCATE 24,14*RES:PRINT "BACK=";
  180. 1800  PRINT USING "##";BACK+1;
  181. 1810  LOCATE 24,24*RES:PRINT "PAL=";
  182. 1820  PRINT USING "#";PAL+1;
  183. 1830  LOCATE 24,33*RES:PRINT "COLOR=";
  184. 1840  PRINT USING "#";COL;
  185. 1850  LOCATE 25,2*RES:PRINT "MODE=";
  186. 1860  IF MODE=0 THEN PRINT "DRAW "; ELSE PRINT "ERASE";
  187. 1870  LOCATE 25,14*RES:PRINT "MARK=";
  188. 1880  IF MARK=0 THEN PRINT "OFF"; ELSE PRINT "SET";
  189. 1890  LOCATE 25,24*RES:PRINT "PEN=";
  190. 1900  IF PNT=0 THEN PRINT "UP  "; ELSE PRINT "DOWN";
  191. 1910  LOCATE 25,33*RES:PRINT "POS=";
  192. 1920  IF BLNK=0 THEN PRINT "OFF"; ELSE PRINT "ON ";
  193. 1930  RETURN
  194. 1940  GOSUB 3840:GOSUB 1690
  195. 1950  I=0:GOSUB 2130
  196. 1960  IF ESC=1 THEN ESC=0:GOTO 2010
  197. 1970  LOCATE 23,1:PRINT SPC(39*RES);
  198. 1980  POKE &H4E,1:IF RES=1 THEN LOCATE 23,16 ELSE LOCATE 23,36
  199. 1990  PRINT "Saving...";
  200. 2000  BSAVE NAM$,VARPTR(PICA%(1)),6802*2
  201. 2010  LOCATE 23,1:IF WNDW=0 THEN PRINT SPC(39*RES); ELSE GOSUB 1730
  202. 2020  RETURN
  203. 2030  GOSUB 3840:GOSUB 1690
  204. 2040  I=1:GOSUB 2130
  205. 2050  IF ESC=1 THEN ESC=0:GOTO 2100
  206. 2060  LOCATE 23,1:PRINT SPC(39*RES);
  207. 2070  POKE &H4E,1:IF RES=1 THEN LOCATE 23,16 ELSE LOCATE 23,36
  208. 2080  PRINT "Loading...";
  209. 2090  BLOAD NAM$,VARPTR(PICA%(1))
  210. 2100  LOCATE 23,1:IF WNDW=0 THEN PRINT SPC(39*RES); ELSE GOSUB 1730
  211. 2110  GOSUB 1710:BCKPNT=POINT(X,Y):BCKMRK=POINT(MARKX,MARKY)
  212. 2120  RETURN
  213. 2130  NAM$="":LOCATE 23,1:PRINT SPC(39*RES);
  214. 2140  POKE &H4E,1:IF RES=1 THEN LOCATE 23,2 ELSE LOCATE 23,22
  215. 2150  IF I=0 THEN PRINT "Save file name: "; ELSE PRINT "Load file name: ";
  216. 2160  IN$=INKEY$:IF IN$="" THEN 2160
  217. 2170  IF LEN(IN$)>1 THEN 2160
  218. 2180  IN=ASC(IN$)
  219. 2190  IF IN=13 THEN 2260
  220. 2200  IF IN=27 THEN ESC=1:GOTO 2260
  221. 2210  IF IN=8 AND LEN(NAM$)>0 THEN LOCATE 23,POS(I)-1:PRINT " ";:LOCATE 23,POS(I)-1:NAM$=MID$(NAM$,1,LEN(NAM$)-1)
  222. 2220  IF IN<32 OR IN>122 THEN 2160
  223. 2230  IF LEN(NAM$)=22 THEN 2250
  224. 2240  NAM$=NAM$+IN$:PRINT IN$;
  225. 2250  GOTO 2160
  226. 2260  RETURN
  227. 2270  GOSUB 3840:GOSUB 3720
  228. 2280  IF ESC=1 THEN ESC=0:GOTO 2300
  229. 2290  PAINT (X,Y),COL,BRD:BCKPNT=COL
  230. 2300  RETURN
  231. 2310  GOSUB 3840:GOSUB 3720
  232. 2320  IF ESC=1 THEN ESC=0:GOTO 2350
  233. 2330  PAINT (X,Y),0,BRD:BCKPNT=0
  234. 2340  IF MARK=1 THEN IF POINT (MARKX,MARKY)=0 THEN BCKMRK=0
  235. 2350  RETURN
  236. 2360  IF MARK=1 THEN PSET (MARKX,MARKY),BCKMRK
  237. 2370  MARKX=X:MARKY=Y:MRKCOL=COL:MARK=1:BCKMRK=BCKPNT:IF WNDW=0 THEN 2390
  238. 2380  POKE &H4E,3:LOCATE 25,14*RES:PRINT "MARK=SET";
  239. 2390  RETURN
  240. 2400  IF PICC%(1)=-999 THEN ERROR 201 ELSE GOSUB 3840:PUT (0,0),PICC%,PSET
  241. 2410  BCKPNT=POINT(X,Y)
  242. 2420  RETURN
  243. 2430  IF MARK=0 THEN ERROR 202:GOTO 2460
  244. 2440  PSET (MARKX,MARKY),BCKMRK:MARK=0:IF WNDW=0 THEN 2460
  245. 2450  POKE &H4E,3:LOCATE 25,14*RES:PRINT "MARK=OFF";
  246. 2460  RETURN
  247. 2470  IF MARK=0 THEN ERROR 202:GOTO 2510
  248. 2480  TX1=ABS(MARKX-X):TY1=(6*ABS(MARKY-Y)/5)*RES
  249. 2490  CIRCLE (MARKX,MARKY),SQR(TX1*TX1+TY1*TY1),COL
  250. 2500  IF POINT(X,Y)=COL THEN BCKPNT=COL
  251. 2510  RETURN
  252. 2520  IF MARK=0 THEN ERROR 202:GOTO 2540
  253. 2530  LINE (MARKX,MARKY)-(X,Y),COL:BCKPNT=COL
  254. 2540  RETURN
  255. 2550  IF MARK=0 THEN ERROR 202:GOTO 2570
  256. 2560  LINE (MARKX,MARKY)-(X,Y),COL,B:BCKPNT=COL
  257. 2570  RETURN
  258. 2580  IF MARK=0 THEN ERROR 202:GOTO 2600
  259. 2590  GOSUB 3840:GET (MARKX,MARKY)-(X,Y),PICB%
  260. 2600  RETURN
  261. 2610  IF PICB%(1)=-999 THEN ERROR 203:GOTO 2790
  262. 2620  GOSUB 3840:POKE &H4E,1:LOCATE 23,1:PRINT SPC(39*RES);
  263. 2630  IF RES=1 THEN LOCATE 23,13 ELSE LOCATE 23,33
  264. 2640  PRINT "Method = ";:I=0
  265. 2650  I=I+1:IF I>5 THEN I=1
  266. 2660  IF RES=1 THEN LOCATE 23,22 ELSE LOCATE 23,42
  267. 2670  PRINT ACT$(I);
  268. 2680  IN$=INKEY$:IF IN$="" THEN 2680 ELSE IN=ASC(IN$)
  269. 2690  IF IN=27 THEN 2770
  270. 2700  IF IN<>13 THEN 2650
  271. 2710  ON I GOTO 2720,2730,2740,2750,2760
  272. 2720  PUT (X,Y),PICB%,PSET:GOTO 2770
  273. 2730  PUT (X,Y),PICB%,PRESET:GOTO 2770
  274. 2740  PUT (X,Y),PICB%,XOR:GOTO 2770
  275. 2750  PUT (X,Y),PICB%,OR:GOTO 2770
  276. 2760  PUT (X,Y),PICB%,AND:GOTO 2770
  277. 2770  LOCATE 23,1:IF WNDW=0 THEN PRINT SPC(39*RES); ELSE GOSUB 1730
  278. 2780  BCKPNT=POINT (X,Y)
  279. 2790  RETURN
  280. 2800  IF MARK=0 THEN ERROR 202:GOTO 2860
  281. 2810  IF MARKX=X OR MARKY=Y THEN ERROR 200:GOTO 2860
  282. 2820  GOSUB 3840:IF X<MARKX THEN TX1=X:TX2=MARKX ELSE TX1=MARKX:TX2=X
  283. 2830  IF Y<MARKY THEN TY1=Y:TY2=MARKY ELSE TY1=MARKY:TY2=Y
  284. 2840  VIEW (TX1+1,TY1+1)-(TX2+1,TY2+1):CLS
  285. 2850  VIEW (1,1)-(318*RES,170):BCKPNT=0:BCKMRK=0
  286. 2860  RETURN
  287. 2870  GOSUB 1690:SCREEN 0,1,1,0:WIDTH 80:CLS:COLOR 2,0
  288. 2880  LOCATE  1,35,0 : PRINT "PC-Pen Help";
  289. 2890  COLOR 6,0
  290. 2900  LOCATE  3, 4,0 : PRINT "PC-Pen  commands  are  entered by the function keys as shown below.  Text"
  291. 2910  LOCATE  4, 4,0 : PRINT "is entered by the regular text keys.  The pen is moved by the ";CHR$(24);", ";CHR$(25);", ";CHR$(26);", ";CHR$(27);", "
  292. 2920  LOCATE  5, 4,0 : PRINT "Home, PgUp, End and PgDn keys.  The pen is lifted up/down by the Ins  key"
  293. 2930  LOCATE  6, 4,0 : PRINT "and  its  position  is turned on/off by the Del key.  Use PrtSc to print."
  294. 2940  COLOR 0,2
  295. 2950  LOCATE  8,34,0 : PRINT "KEYTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENCLOSE";
  296. 2960  LOCATE  9,34,0 : PRINT "OPENKEYTHENTHENTHENCLOSE KEYTHENTHENTHENCLOSEOPEN";
  297. 2970  LOCATE 10,34,0 : PRINT "OPENOPENF1 OPEN OPENF2 OPENOPEN";
  298. 2980  LOCATE 11,34,0 : PRINT "OPENSCREENTHENTHENTHENLOAD SCREENTHENTHENTHENLOADOPEN";
  299. 2990  LOCATE 12,34,0 : PRINT "OPENKEYTHENTHENTHENCLOSE KEYTHENTHENTHENCLOSEOPEN";
  300. 3000  LOCATE 13,34,0 : PRINT "OPENOPENF3 OPEN OPENF4 OPENOPEN";
  301. 3010  LOCATE 14,34,0 : PRINT "OPENSCREENTHENTHENTHENLOAD SCREENTHENTHENTHENLOADOPEN";
  302. 3020  LOCATE 15,34,0 : PRINT "OPENKEYTHENTHENTHENCLOSE KEYTHENTHENTHENCLOSEOPEN";
  303. 3030  LOCATE 16,34,0 : PRINT "OPENOPENF5 OPEN OPENF6 OPENOPEN";
  304. 3040  LOCATE 17,34,0 : PRINT "OPENSCREENTHENTHENTHENLOAD SCREENTHENTHENTHENLOADOPEN";
  305. 3050  LOCATE 18,34,0 : PRINT "OPENKEYTHENTHENTHENCLOSE KEYTHENTHENTHENCLOSEOPEN";
  306. 3060  LOCATE 19,34,0 : PRINT "OPENOPENF7 OPEN OPENF8 OPENOPEN";
  307. 3070  LOCATE 20,34,0 : PRINT "OPENSCREENTHENTHENTHENLOAD SCREENTHENTHENTHENLOADOPEN";
  308. 3080  LOCATE 21,34,0 : PRINT "OPENKEYTHENTHENTHENCLOSE KEYTHENTHENTHENCLOSEOPEN";
  309. 3090  LOCATE 22,34,0 : PRINT "OPENOPENF9 OPEN OPENF10OPENOPEN";
  310. 3100  LOCATE 23,34,0 : PRINT "OPENSCREENTHENTHENTHENLOAD SCREENTHENTHENTHENLOADOPEN";
  311. 3110  LOCATE 24,34,0 : PRINT "SCREENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENTHENLOAD";
  312. 3120  COLOR 6,0
  313. 3130  LOCATE  8, 4,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  314. 3140  LOCATE  8,50,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  315. 3150  LOCATE 11, 4,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  316. 3160  LOCATE 11,50,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  317. 3170  LOCATE 14, 4,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  318. 3180  LOCATE 14,50,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  319. 3190  LOCATE 17, 4,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  320. 3200  LOCATE 17,50,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  321. 3210  LOCATE 20, 4,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  322. 3220  LOCATE 20,50,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  323. 3230  LOCATE 23, 4,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  324. 3240  LOCATE 23,50,0 : PRINT "SOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUNDSOUND";
  325. 3250  COLOR 9,0
  326. 3260  LOCATE  9, 4,0 : PRINT "Resolution";
  327. 3270  LOCATE  9,50,0 : PRINT "Background";
  328. 3280  LOCATE 12, 4,0 : PRINT "Palette";
  329. 3290  LOCATE 12,50,0 : PRINT "Color";
  330. 3300  LOCATE 15, 4,0 : PRINT "Mode";
  331. 3310  LOCATE 15,50,0 : PRINT "Window";
  332. 3320  LOCATE 18, 4,0 : PRINT "Load";
  333. 3330  LOCATE 18,50,0 : PRINT "Save";
  334. 3340  LOCATE 21, 4,0 : PRINT "Quit";
  335. 3350  LOCATE 21,50,0 : PRINT "Help";
  336. 3360  COLOR 12,0
  337. 3370  LOCATE 10, 4,0 : PRINT "Mark";
  338. 3380  LOCATE 10,50,0 : PRINT "Unmark";
  339. 3390  LOCATE 13, 4,0 : PRINT "Cut";
  340. 3400  LOCATE 13,50,0 : PRINT "Paste";
  341. 3410  LOCATE 16, 4,0 : PRINT "Erase";
  342. 3420  LOCATE 16,50,0 : PRINT "Circle";
  343. 3430  LOCATE 19, 4,0 : PRINT "Rectangle";
  344. 3440  LOCATE 19,50,0 : PRINT "Line";
  345. 3450  COLOR 14,0
  346. 3460  LOCATE 10,17,0 : PRINT "Clear";
  347. 3470  LOCATE 13,17,0 : PRINT "Paint";
  348. 3480  LOCATE 13,63,0 : PRINT "Unpaint";
  349. 3490  LOCATE 16,17,0 : PRINT "Back-up";
  350. 3500  LOCATE 16,63,0 : PRINT "Restore";
  351. 3510  LOCATE 24,4,0
  352. 3520  COLOR 9,0:PRINT "Blue";:COLOR 6,0:PRINT " = Function Key Alone";
  353. 3530  LOCATE 25,4,0
  354. 3540  COLOR 12,0:PRINT "Red";:COLOR 6,0:PRINT " = With Shift ";
  355. 3550  COLOR 14,0:PRINT "  Yellow";:COLOR 6,0:PRINT " = With Ctrl";
  356. 3560  LOCATE 25,50,0:PRINT "Press any key to continue.";
  357. 3570  IN$=INKEY$:IF IN$="" THEN 3570
  358. 3580  SCREEN RES,0:IF RES=1 THEN COLOR BACK,PAL
  359. 3590  IF WNDW=1 THEN GOSUB 1570 ELSE GOSUB 1610
  360. 3600  GOSUB 1710
  361. 3610  RETURN
  362. 3620  GOSUB 3840:GOSUB 3890
  363. 3630  IF ESC=1 THEN ESC=0:GOTO 3660
  364. 3640  IF IN$="N" OR IN$="n" THEN 3660
  365. 3650  CLS:MARK=0:BCKPNT=0
  366. 3660  RETURN
  367. 3670  IF MODE=0 THEN MODE=1 ELSE MODE=0
  368. 3680  IF WNDW=0 THEN 3710
  369. 3690  POKE &H4E,3:LOCATE 25,2*RES:PRINT "MODE=";
  370. 3700  IF MODE=0 THEN PRINT "DRAW "; ELSE PRINT "ERASE";
  371. 3710  RETURN
  372. 3720  POKE &H4E,1:LOCATE 23,1:PRINT SPC(39*RES);
  373. 3730  IF RES=1 THEN I=3:LOCATE 23,13 ELSE I=1:LOCATE 23,33
  374. 3740  PRINT "Border Color = ";:BRD=-1
  375. 3750  BRD=BRD+1:IF BRD>I THEN BRD=0
  376. 3760  IF RES=1 THEN LOCATE 23,28 ELSE LOCATE 23,48
  377. 3770  IF BRD=0 THEN POKE &H4E,1:PRINT "B" ELSE POKE &H4E,BRD:PRINT USING "#";BRD;
  378. 3780  IN$=INKEY$:IF IN$="" THEN 3780 ELSE IN=ASC(IN$)
  379. 3790  IF IN=27 THEN ESC=1:GOTO 3810
  380. 3800  IF IN<>13 THEN 3750
  381. 3810  LOCATE 23,1:IF WNDW=0 THEN PRINT SPC(39*RES); ELSE GOSUB 1730
  382. 3820  RETURN
  383. 3830  RETURN
  384. 3840  IF MODE=0 THEN IF PNT=1 THEN I=COL ELSE I=BCKPNT
  385. 3850  IF MODE=1 THEN IF PNT=1 THEN I=0 ELSE I=BCKPNT
  386. 3860  PSET (X,Y),I
  387. 3870  IF MARK=1 THEN PSET (MARKX,MARKY),BCKMRK
  388. 3880  RETURN
  389. 3890  LOCATE 23,1:PRINT SPC(39*RES);
  390. 3900  IF RES=1 THEN LOCATE 23,14 ELSE LOCATE 23,35
  391. 3910  POKE &H4E,1:PRINT "Are you sure?";
  392. 3920  IN$=INKEY$:IF IN$="" THEN 3920 ELSE IN$=MID$(IN$,1,1)
  393. 3930  IF IN$=CHR$(27) THEN ESC=1:GOTO 3960
  394. 3940  IF IN$="Y" OR IN$="y" OR IN$="N" OR IN$="n" THEN 3960
  395. 3950  ERROR 205:ESC=1
  396. 3960  LOCATE 23,1:IF WNDW=0 THEN PRINT SPC(39*RES); ELSE GOSUB 1730:GOSUB 1760
  397. 3970  RETURN
  398. 3980  IF ERR<>7 AND ERR<>73 THEN 4080
  399. 3990  SCREEN 0,1,0,0:WIDTH 80:CLS:BEEP
  400. 4000  IF ERR=73 THEN 4040
  401. 4010  PRINT "You do not have enough memory to run PC-Pen."
  402. 4020  PRINT "See the PC-Pen User's Manual for memory requirements."
  403. 4030  GOTO 4050
  404. 4040  PRINT "PC-Pen must be run under Advanced Basic."
  405. 4050  PRINT:PRINT "Press any key to continue."
  406. 4060  IN$=INKEY$:IF IN$="" THEN 4060
  407. 4070  SYSTEM
  408. 4080  FOR I=1 TO 18
  409. 4090  IF ERR<>ERRCD%(I) THEN 4180
  410. 4100  POKE &H4E,1:LOCATE 23,1:PRINT SPC(39*RES);
  411. 4110  IF RES=1 THEN LOCATE 23,2 ELSE LOCATE 23,22
  412. 4120  BEEP:PRINT ERRMSG$(I);
  413. 4130  IF RES=1 THEN LOCATE 23,26 ELSE LOCATE 23,46
  414. 4140  PRINT "Press any key.";
  415. 4150  IN$=INKEY$:IF IN$="" THEN 4150
  416. 4160  IF ERRRES%(I)=1 THEN LOCATE 23,1:IF WNDW=0 THEN PRINT SPC(39*RES); ELSE GOSUB 1730
  417. 4170  GOTO 4200
  418. 4180  NEXT I
  419. 4190  BEEP
  420. 4200  RESUME NEXT
  421. 4210  DATA &H4,&H24,&H44,&H64
  422. 4220  DATA   5, 1, "Not enough room."
  423. 4230  DATA  27, 0, "Printer error."
  424. 4240  DATA  52, 0, "Invalid file name."
  425. 4250  DATA  53, 0, "File not found."
  426. 4260  DATA  61, 0, "Disk is full."
  427. 4270  DATA  64, 0, "Invalid file name."
  428. 4280  DATA  67, 0, "Invalid drive or path."
  429. 4290  DATA  68, 0, "Disk error."
  430. 4300  DATA  70, 0, "Disk write-protected."
  431. 4310  DATA  71, 0, "Disk not ready."
  432. 4320  DATA  72, 0, "Disk is bad."
  433. 4330  DATA  76, 0, "Invalid drive or path."
  434. 4340  DATA 200, 1, "Invalid area."
  435. 4350  DATA 201, 1, "No Back-up."
  436. 4360  DATA 202, 1, "Mark not set."
  437. 4370  DATA 203, 1, "Nothing cut."
  438. 4380  DATA 204, 1, "Low resolution only."
  439. 4390  DATA 205, 0, "Y=yes, N=no."
  440. 4400  DATA "Normal     ","Complement ","Animate    ","Superimpose","Mask       "
  441.